﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SGC.BE;
using SGC.DL;
using SGC.DL.DL_CcuActualizarPlanAuditoria;

namespace SGC.BL.BL_CcuActualizarPlanAuditoria
{
    public class BL_CcuActualizarPlanAuditoria
    {
     
        public static List<BE_PlanAuditoria> obtenerPlanesAuditoria_BL()
        {
            return DL_CcuActualizarPlanAuditoria.obtenerPlanesAuditoria_DL();
        }
        
        public static List<BE_Empleado> obtenerAuditores_BL()
        {
            return DL_CcuActualizarPlanAuditoria.obtenerAuditores_DL();
        }

        public static List<BE_PlanAuditor> obtenerAuditoresPorPlan_BL(BE_PlanAuditoria objPlan)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerAuditoresPorPlan_DL(objPlan);
        }

        public static int registrarPlanAuditor_BL(BE_PlanAuditor objPlanAud, Boolean Accion, ref String strError)
        {
            return DL_CcuActualizarPlanAuditoria.registrarPlanAuditor_DL(objPlanAud, Accion, ref strError);
        }

        public static int actualizarAuditorLider_BL(BE_PlanAuditor objPlanAud, Boolean Accion, ref String strError)
        {
            return DL_CcuActualizarPlanAuditoria.actualizarAuditorLider_DL(objPlanAud, Accion, ref strError);
        }

        public static String registrarPlanAuditoria_BL(BE_PlanAuditoria objPlanAud, List<BE_PlanAuditor> Auditores, String Proceso)
        {
            String strMensaje = "";

            if (Auditores.Count == 0)
            {
                strMensaje = "Debe seleccionar al menos un auditor.";
                return strMensaje;
            }

            var varDistinctConcepto = Auditores.Where(c => c.LIDER == true);
            Int16 intContador = 0;
            foreach (BE_PlanAuditor item in varDistinctConcepto)
            {
                intContador++;
                break;
            }

            if (intContador == 0)
            {
                strMensaje = "Debe de elegir un auditor líder.";
            }

            int intRegistros = DL_CcuActualizarPlanAuditoria.registrarPlanAuditoria_BL(objPlanAud, Proceso);
            if (intRegistros != 1)
            {
                strMensaje = "No se pudo completar el registro.";
            }
            return strMensaje;
        }

        public static int registrarDetallePlan_BL(BE_DetallePlanAuditoria objDetallePlan, Boolean Accion, ref String strError)
        {


            return DL_CcuActualizarPlanAuditoria.registrarDetallePlan_DL(objDetallePlan, Accion, ref strError);
        }

        public static int registrarPlanProcesoArea_BL(BE_PlanProcesoArea objProcesoArea, Boolean Accion, ref String strError)
        {
            return DL_CcuActualizarPlanAuditoria.registrarPlanProcesoArea_DL(objProcesoArea, Accion, ref strError);
        }

        public static List<BE_Proceso> obtenerProcesos_BL()
        {
            return DL_CcuActualizarPlanAuditoria.obtenerProcesos_DL();
        }

        public static List<BE_ProcesoArea> obtenerProcesosAreas_BL(BE_ProcesoArea objProceso)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerProcesosAreas_DL(objProceso);
        }

        public static List<BE_Procedimiento> obtenerProcedimientos_DL(BE_Procedimiento objProceso)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerProcedimientos_DL(objProceso);
        }

        public static List<BE_CheckListProcedimiento> obtenerProcedimientosChecklist_BL(BE_CheckListProcedimiento objProcedimiento)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerProcedimientosChecklist_DL(objProcedimiento);
        }

        public static Boolean validarPlanAuditoria_BL(List<BE_PlanAuditoria> Planes, BE_PlanAuditoria Plan)
        {
            foreach (BE_PlanAuditoria fila in Planes)
            {
                if (fila.CODIGO_PLAN.Equals(Plan.CODIGO_PLAN))
                {                    
                    Plan.AUDITADO = fila.AUDITADO;                    
                }
            }
            return Plan.AUDITADO;
        }

        public static BE_PlanAuditoria generarPlanAuditoria_BL(string IDPROCESO, string IDPLAN)
        {
            return DL_CcuActualizarPlanAuditoria.generarPlanAuditoria_DL(IDPROCESO, IDPLAN);
        }

        public static List<BE_ProcesoArea> obtenerProcesosAreasGrabados_BL(BE_PlanAuditoria objPlan)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerProcesosAreasGrabados_DL(objPlan);
        }

        public static List<BE_Procedimiento> obtenerDetallePlanAuditoria_BL(BE_PlanAuditoria objPlan)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerDetallePlanAuditoria_DL(objPlan);
        }

        public static List<BE_DetallePlanAuditoria> obtenerCheckProcedimientoPlan_BL(BE_PlanAuditoria objPlan)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerCheckProcedimientoPlan_DL(objPlan);
        }

        public static BE_PlanAuditoria obtenerPlanCargado_BL(BE_PlanAuditoria objPlan, ref String Proceso)
        {
            return DL_CcuActualizarPlanAuditoria.obtenerPlanCargado_DL(objPlan, ref Proceso);
        }
    }
}
